using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._CrimeAnalysisandSafetyTools
{
    /// <summary>
    /// <para>Summarize Percent Change</para>
    /// <para>Calculates the percent change for features that correspond with point features representing two equal comparison time periods.</para>
    /// <para>计算与表示两个相等比较时间段的点要素相对应的要素的百分比变化。</para>
    /// </summary>    
    [DisplayName("Summarize Percent Change")]
    public class SummarizePercentChange : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public SummarizePercentChange()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_features">
        /// <para>Input  Features</para>
        /// <para>The coincident features from which comparison time periods will be counted and compared.</para>
        /// <para>将计算和比较比较时间段的重合特征。</para>
        /// </param>
        /// <param name="_in_current_features">
        /// <para>Input Current Period Point Features</para>
        /// <para><xdoc>
        ///   <para>The point features filtered to the most recent comparison time period.</para>
        ///   <para>For example, crimes from the previous 14 days.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>过滤到最近比较时间段的点要素。</para>
        ///   <para>例如，过去 14 天的犯罪。</para>
        /// </xdoc></para>
        /// </param>
        /// <param name="_in_previous_features">
        /// <para>Input Previous Period Point Features</para>
        /// <para><xdoc>
        ///   <para>The point features filtered to the time period immediately preceding the current period. This time period must beof equal length to the current period, to provide an accurate comparison.</para>
        ///   <para>For example, if the current period contains features from January 15 to January 28, the previous period would contain features from January 1 to January 14.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>过滤到当前期间之前的时间段的点要素。此时间段的长度必须与当前时间段相等，以提供准确的比较。</para>
        ///   <para>例如，如果当前期间包含 1 月 15 日至 1 月 28 日的要素，则上一期间将包含 1 月 1 日至 1 月 14 日的要素。</para>
        /// </xdoc></para>
        /// </param>
        /// <param name="_out_feature_class">
        /// <para>Output Feature Class</para>
        /// <para>The output feature class containing difference counts and percent change calculations for the time period comparison.</para>
        /// <para>输出要素类，其中包含时间段比较的差异计数和百分比变化计算。</para>
        /// </param>
        public SummarizePercentChange(object _in_features, object _in_current_features, object _in_previous_features, object _out_feature_class)
        {
            this._in_features = _in_features;
            this._in_current_features = _in_current_features;
            this._in_previous_features = _in_previous_features;
            this._out_feature_class = _out_feature_class;
        }
        public override string ToolboxName => "Crime Analysis and Safety Tools";

        public override string ToolName => "Summarize Percent Change";

        public override string CallName => "ca.SummarizePercentChange";

        public override List<string> AcceptEnvironments => ["MDomain", "MResolution", "MTolerance", "XYDomain", "XYResolution", "XYTolerance", "ZDomain", "ZResolution", "ZTolerance", "autoCommit", "configKeyword", "extent", "geographicTransformations", "maintainAttachments", "outputCoordinateSystem", "outputMFlag", "outputZFlag", "outputZValue", "qualifiedFieldNames", "scratchWorkspace", "workspace"];

        public override object[] ParameterInfo => [_in_features, _in_current_features, _in_previous_features, _out_feature_class, _search_radius];

        /// <summary>
        /// <para>Input  Features</para>
        /// <para>The coincident features from which comparison time periods will be counted and compared.</para>
        /// <para>将计算和比较比较时间段的重合特征。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input  Features")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_features { get; set; }


        /// <summary>
        /// <para>Input Current Period Point Features</para>
        /// <para><xdoc>
        ///   <para>The point features filtered to the most recent comparison time period.</para>
        ///   <para>For example, crimes from the previous 14 days.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>过滤到最近比较时间段的点要素。</para>
        ///   <para>例如，过去 14 天的犯罪。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Current Period Point Features")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_current_features { get; set; }


        /// <summary>
        /// <para>Input Previous Period Point Features</para>
        /// <para><xdoc>
        ///   <para>The point features filtered to the time period immediately preceding the current period. This time period must beof equal length to the current period, to provide an accurate comparison.</para>
        ///   <para>For example, if the current period contains features from January 15 to January 28, the previous period would contain features from January 1 to January 14.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>过滤到当前期间之前的时间段的点要素。此时间段的长度必须与当前时间段相等，以提供准确的比较。</para>
        ///   <para>例如，如果当前期间包含 1 月 15 日至 1 月 28 日的要素，则上一期间将包含 1 月 1 日至 1 月 14 日的要素。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Previous Period Point Features")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_previous_features { get; set; }


        /// <summary>
        /// <para>Output Feature Class</para>
        /// <para>The output feature class containing difference counts and percent change calculations for the time period comparison.</para>
        /// <para>输出要素类，其中包含时间段比较的差异计数和百分比变化计算。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Feature Class")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _out_feature_class { get; set; }


        /// <summary>
        /// <para>Search Radius</para>
        /// <para><xdoc>
        ///   <para>The maximum distance from the line or point Input Features that a point feature will be considered coincident.</para>
        ///   <para>This parameter is only active when point or line features are used as the input features.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>与线或点的最大距离 输入要素 将被视为重合的点要素。</para>
        ///   <para>仅当将点要素或线要素用作输入要素时，此参数才处于活动状态。</para>
        /// </xdoc></para>
        /// <para>单位： Meters | Inches | Points | Feet | Yards | Millimeters | Centimeters </para>
        /// </summary>
        [DisplayName("Search Radius")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public string? _search_radius { get; set; } = null;


        public SummarizePercentChange SetEnv(object MDomain = null, object MResolution = null, object MTolerance = null, object XYDomain = null, object XYResolution = null, object XYTolerance = null, object ZDomain = null, object ZResolution = null, object ZTolerance = null, int? autoCommit = null, object configKeyword = null, object extent = null, object geographicTransformations = null, object outputCoordinateSystem = null, object outputMFlag = null, object outputZFlag = null, object outputZValue = null, bool? qualifiedFieldNames = null, object scratchWorkspace = null, object workspace = null)
        {
            base.SetEnv(MDomain: MDomain, MResolution: MResolution, MTolerance: MTolerance, XYDomain: XYDomain, XYResolution: XYResolution, XYTolerance: XYTolerance, ZDomain: ZDomain, ZResolution: ZResolution, ZTolerance: ZTolerance, autoCommit: autoCommit, configKeyword: configKeyword, extent: extent, geographicTransformations: geographicTransformations, outputCoordinateSystem: outputCoordinateSystem, outputMFlag: outputMFlag, outputZFlag: outputZFlag, outputZValue: outputZValue, qualifiedFieldNames: qualifiedFieldNames, scratchWorkspace: scratchWorkspace, workspace: workspace);
            return this;
        }

    }

}